﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Time.BLL;
using Time.IBLL;
using Time.OPCServerV;

namespace THT_MESFrame
{
    public partial class MainForm : Form
    {
        //plc操作对象
        private OpcBusiness opc;
        //获取全部数据
        IEqAlarm_BLL objIEqAlarm_BLL = new EqAlarm_BLL();
        //配置文件地址
        public static string configPath;
        //初始化返回信息是否初始化成功
        bool OpcConnectBl = false;
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            configPath = Application.StartupPath + "\\Config.ini";

            //查询配置PLC的地址
            DataTable objDt = objIEqAlarm_BLL.getDataTable("StoveLineColumn");
            //用于存放PLC地址
            List<string> lstItem = new List<string>();
            //遍历地址添加到集合中
            lstItem.Add("Channel1.Device2.D02524");
            lstItem.Add("Channel1.Device2.D02525");
            lstItem.Add("Channel1.Device2.D02526");
            lstItem.Add("Channel1.Device2.D02527");
            lstItem.Add("Channel1.Device2.D02528");
            lstItem.Add("Channel1.Device1.D02528");

            //连接OPCServer并初始化OPC连接
            opc = OpcBusiness.GetInstance();

            string errorStr = null;
            OpcConnectBl = opc.Init(lstItem, ref errorStr);

        }
        /*******************
         * sky
         * 关闭程序最小化到任务栏
         * *****************/
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            this.Hide();
            this.notifyIcon1.Visible = true;
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Show();
        }
        /******************
         * sky
         * 右键程序的图标会有三个选项：显示窗口、隐藏窗口、退出程序
         * 第一个显示窗口
         * *****************/
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
        }
        /*******************
         * sky
         * 第二个选项：隐藏窗口
         * *****************/
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
        /*******************
         * sky
         * 第三个询问是否退出程序
         * *****************/
        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定要退出程序？", "安全提示", System.Windows.Forms.MessageBoxButtons.YesNo,
                System.Windows.Forms.MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    //  notifyIcon1.Visible = false;//系统托盘图标不可见
                    this.Dispose();//释放资源
                    notifyIcon1.Dispose();
                    this.Close();//关闭窗体 
                    Application.Exit();//关闭应用程序窗体 
                    Application.ExitThread(); //强制中止调用线程上的所有消息，同样面临其它线程无法正确退出的问题；
                    System.Environment.Exit(0); //这是最彻底的退出方式，不管什么线程都被强制退出，把程序结束的很干净。
                }
                catch (Exception ex)
                {

                }
                finally
                {
                    GC.Collect();
                }
            }
        }
    }
}
